“O cientista não estuda a natureza porque ela é útil. Ele estuda porque tem prazer nisso, e tem prazer porque é bonito.” (Henri Poincaré)
Há muitos exemplos de fatos naturais que pode ser descritos em termos matemáticos. Bons exemplos são as formas de flocos de neve, a geometria fractal do brócolis romanesco ou como a auto-semelhança rege o crescimento das plantas.
Utilizarei a ferramenta R para fazer alguns gráficos bonitos. Esse poder gráfico pode ser usada para produzir imagens artísticas como ilustrada na figura, que é inspirado em como as plantas se organiza. Esse padrão de distribuição é chamado filotaxia ou phyllotaxis e servirá de base nesse projeto.
#Instalar pacotes necessários
#install.packages("tidyverse")
#install.packages("gridExtra")
# Carregar pacote ggplot2
library(ggplot2)
library(cowplot)
Desenhar 50 pontos em um círculo com raio 1. Como tudo (x, y) ponto deve estar em um círculo unitário, segue que x² + y² = 1. Nós podemos conseguir isso usando o famoso Identidade Trigonométrica Pitagórica que afirma sen²(θ) + cos²(θ) = 1 para qualquer número real θ.
# Fornecer os dados para plot do círculo
t <- seq(0, 2*pi, length.out = 50)
x <- sin(t)
y <- cos(t)
df <- data.frame(t, x, y)
# Fazer um gráfico de dispersão de pontos em um círculo
p <- ggplot(df, aes(x, y))
p + geom_point()
As plantas organizam suas folhas em espirais. Uma espiral é uma curva
que começa na origem e se afasta da origem à medida que gira em torno
dela. No gráfico acima todos os nossos pontos estão à mesma distância da
origem. Uma maneira simples de organizar elas em espiral é multiplicar
x e y por um fator que aumenta para cada
ponto. Nós poderíamos usar t como esse fator, pois atende a
essas condições. Usarei o Ângulo de Ouro para fazer algo mais
harmonioso.
Golden Angle = π(3 − √5)
Esse número é inspirado pela Proporção Áurea, um dos números mais famosos na história da matemática. Imagine que você tenha uma circunferência e a divida em dois arcos com comprimentosa
e b, com a>b (um arco é uma parte da
circunferência). O ângulo divide o círculo de modo que
a/b=(a+b)/a é chamado de Ângulo de Ouro. Em outras
palavras: o Ângulo de Ouro divide um círculo de modo que a razão entre o
arco grande e o pequeno seja a Proporção Áurea. Essa imagem da wikipédia
ilustra tal definição.
O Ângulo de Ouro é o ângulo subtendido pelo arco menor (vermelho). Tanto a Proporção Áurea quanto o Ângulo de Ouro aparecem em lugares inesperados na natureza. Além das pétalas de flores e folhas de plantas, você as encontrará em cabeças de semente, pinhas, sementes de girassol, conchas, galáxias espirais, furacões, entre outros.
# Defina o número de pontos
points <- 1000
# Defina o Ângulo de Ouro
angle <- pi * (3 - sqrt(5))
t <- (1:points) * angle
x <- sin(t)
y <-cos(t)
df <- data.frame(t, x, y)
# Fazer um gráfico de dispersão em uma espiral
p <- ggplot(df, aes(x*t, y*t))
p + geom_point()
Um gráfico contém vários elementos que define sua aparência deixando-o mais apresentável e compreensível. Para fazer arte não é preciso da maioria desses elementos.
df <- data.frame(t, x, y)
# Fazer um gráfico de dispersão em uma espiral e remover alguns componentes
p <- ggplot(df, aes(x*t, y*t))
p + geom_point() +
theme(panel.background = element_rect(fill = "white"), # remove o fundo em cinza
panel.grid=element_blank(), #remove a grade de linhas brancas horizontais e verticais
axis.ticks=element_blank(), # remove uns tracinhos que ficam no eixo x e y
axis.title=element_blank(), # remove o título de cada eixo
axis.text=element_blank()) # remove os textos que representa os valores de cada eixo)
O desenho está começando a parecer como uma planta, mas pode ser melhor. Mudando a cor, transparência e tamanhos dos pontos, a imagem se tornará mais aparente.
p <- ggplot(df, aes(x*t, y*t))
p + geom_point(size=5, alpha=.5, colour="darkgreen") + #ajustando tamanho dos pontos, transparência(alpha) e cor
theme(panel.background = element_rect(fill = "white"),
panel.grid=element_blank(),
axis.ticks=element_blank(),
axis.title=element_blank(),
axis.text=element_blank())
A imagem abaixo, irá lembrar um dente-de-leão.
p <- ggplot(df, aes(x*t, y*t))
p + geom_point(aes(size=t), alpha=.5, shape=8, colour="yellow") + #ajustando tamanho dos pontos, forma e cor
theme(panel.background = element_rect(fill = "white"),
panel.grid=element_blank(),
axis.ticks=element_blank(),
axis.title=element_blank(),
axis.text=element_blank(),
legend.position = "none") # remove o painel de legendas
As plantas não usam apenas o Ângulo de Ouro para organizar as folhas. O Ângulo de Ouro também é encontrado no arranjo de sementes de girassol.
p <- ggplot(df, aes(x*t, y*t))
p + geom_point(aes(size=t), alpha=.5, shape=17, colour="yellow") +
theme(panel.background = element_rect(fill = "darkmagenta"),
panel.grid=element_blank(),
axis.ticks=element_blank(),
axis.title=element_blank(),
axis.text=element_blank(),
legend.position = "none")
Os padrões são muito sensíveis ao ângulo entre os pontos que formam a espiral. Pequenas mudanças no ângulo pode gerar imagens muito diferentes.
# Mudando o valor do ângulo
angle <- 2.0
points <- 1000
t <- (1:points)*angle
x <- sin(t)
y <- cos(t)
df <- data.frame(t, x, y)
p <- ggplot(df, aes(x*t, y*t))
p + geom_point(aes(size=t), alpha=.5, shape=11, colour="yellow") +
theme(panel.background = element_rect(fill = "darkmagenta"),
panel.grid=element_blank(),
axis.ticks=element_blank(),
axis.title=element_blank(),
axis.text=element_blank(),
legend.position="none")
As técnicas que usamos até agora nos permitem criar um número infinito de padrões inspirados na natureza: o único limite é nossa imaginação.
A imagem ao lado esquerdo é uma variação simples da flor anterior e é em essência, muito similar à primeira figura que foi traçado 50 pontos em um círculo
func <- function(angle = 13 *pi/180 , points = 2000, cor="magenta4") {
t <- (1:points)*angle
x <- sin(t)
y <- cos(t)
df <- data.frame(t, x, y)
ggplot(df, aes(x*t, y*t)) +
geom_point(size=100, alpha=.1, shape=1, colour=cor) +
theme(panel.background = element_rect(fill = "white"),
panel.grid=element_blank(),
axis.ticks=element_blank(),
axis.title=element_blank(),
axis.text=element_blank(),
legend.position="none")
}
plot_grid(func(), func(angle = 42, cor="#E02F5B"), labels = "AUTO")